/**
* ${classInfo.classComment}服务
* @author ${authorName} ${.now?string('yyyy-MM-dd')}
*/
@Slf4j
@Service
public class ${classInfo.className}Service {

}

=====
/**
* ${classInfo.classComment}管理
* @author ${authorName} ${.now?string('yyyy-MM-dd')}
*/
@Slf4j
@Component
public class ${classInfo.className}Manager {

}

=====
/**
* ${classInfo.classComment}Mapper层
* @author ${authorName} ${.now?string('yyyy-MM-dd')}
*/
public interface ${classInfo.className}Mapper {

}

=====
/**
* ${classInfo.classComment}配置类
* @author ${authorName} ${.now?string('yyyy-MM-dd')}
*/
@Configuration
public class ${classInfo.className}Configuration {

}


 =====类名===== https://juejin.cn/post/6995342820512890893
${classInfo.className}Bootstrap/${classInfo.className}Starter: 程序启动类
${classInfo.className}Resolver: 解析器, 不同对象之间的格式转换,一般特别复杂的转换或者有加载过程的需求,可以使用Resolver
${classInfo.className}Converter(convert): 转换器, 不同对象之间的格式转换
${classInfo.className}Parser:如 抽象类SAXParserFactory(SAXParserFactoryImpl)负责产生SAXParser的
${classInfo.className}Wrapper: 包装某个对象,做一些额外的处理,增强或者去掉某些功能
${classInfo.className}Adapter: 适配器类,除了常用的适配器模式外,如果你的某个Handler里面的方法特别多,还可以使用Adapter用来实现Handler接口里面的空方法,其他类只用继承Adapter就可以,无需实现Handler接口
${classInfo.className}Support: 同${classInfo.className}Adapter 如: org.quartz.listeners.SchedulerListenerSupport里面都是实现SchedulerListener的空方法,具体的功能都在QuartzServer中实现
${classInfo.className}Service: 服务层
${classInfo.className}Manager: 对有生命状态的对象进行管理,通常作为某一类资源的管理入口
${classInfo.className}Mapper: Mapper层
${classInfo.className}Component: 组件层
${classInfo.className}Customizer: 用来对某个对象进行特别的配置,由于这些配置过程特别的复杂,值得单独提取出来进行自定义设置, 如io.lettuce.core.resource.NettyCustomizer,该类的方法有afterBootstrapInitialized,afterChannelInitialized,customize(主要)等。
${classInfo.className}Provider: 提供者 如 CollatorProvider和实现者CollatorProviderImpl, 把策略模式和方法工厂揉在了一块,让人用起来很顺手。Provider一般是接口或者抽象类,以便能够完成子实现。
${classInfo.className}Processor: 某一类功能的处理器,用来表示某个处理过程,是一系列片段代码的集合  如 org.springframework.beans.factory.config.BeanPostProcessor和org.springframework.web.servlet.support.RequestDataValueProcessor,该类的方法有 processAction,processUrl,postProcessBeforeInitialization/postProcessAfterInitialization。
${classInfo.className}Handler/${classInfo.className}Callback/${classInfo.className}Trigger/${classInfo.className}Listener:Callback通常是一个接口,用于响应某类消息,进行后续处理；Handler通常表示持有真正消息处理逻辑的对象,它是有状态的；tigger触发器代表某类事件的处理,属于Handler,通常不会出现在类的命名中；Listener的应用更加局限,通常在观察者模式中用来表示特定的含义。 如StartEngineEventListener的afterStartEngine和beforeStartEngine方法
${classInfo.className}Initializer: 程序需要经过大量的初始化操作才能启动,独立出来,专门做初始化动作,如initialize方法  org.quartz.core.JobRunShell.initialize方法在初始化的时候生成JobExecutionContextImpl,这是一个Context对象, 然后在execute方法中将这个Context对象传入 init方法。
${classInfo.className}Selector: 根据一系列条件，获得相应的同类资源。它比较像Factory，但只处理单项资源。
${classInfo.className}Creator: 创建者
${classInfo.className}Configuration: 配置类
${classInfo.className}Builder: 建造者模式
${classInfo.className}Factory/${classInfo.className}Factories
${classInfo.className}Constants/${classInfo.className}Constant
${classInfo.className}Printer: 如org.quartz.helpers.VersionPrinter 帮助类,打印出版本信息
${classInfo.className}Template: 如: JDBCTemplate, 模板方法类的命名。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
${classInfo.className}Context/${classInfo.className}ContextImpl: 如 JobExecutionContext和JobExecutionContextImpl还有ApplicationContext(通过这个接口我们可以从当前的程序中获取到我们需要的bean信息)
${classInfo.className}Scheduler
${classInfo.className}Server
${classInfo.className}Reader/${classInfo.className}Writer
${classInfo.className}Container
${classInfo.className}Validator(validate)
${classInfo.className}Predicate(predicate)
${classInfo.className}Iterator
${classInfo.className}Utils: 工具类,无状态的,全部都是静态方法,如org.apache.commons.collections.BufferUtils
${classInfo.className}Helper: 工具类,需要创建类的实例才能用
${classInfo.className}Strategy: 策略模式
${classInfo.className}Aware: Aware就是感知的意思，一般以该单词结尾的类，都实现了Aware接口。拿spring来说，Aware 的目的是为了让bean获取spring容器的服务。具体回调方法由子类实现，比如ApplicationContextAware。它有点回调的意思。
${classInfo.className}Interceptor/${classInfo.className}InterceptorChain: 拦截器和拦截器链
${classInfo.className}ExecChain: 执行器链
${classInfo.className}Properties
${classInfo.className}Executor: 执行器,如 org.quartz.spi.ThreadExecutor的execute和initialize方法
${classInfo.className}Support
${classInfo.className}Generator: 生成器, 通常用于生成某样东西, 如ID等 org.bouncycastle.asn1.x509.ExtensionsGenerator.generate生成的是Extensions
${classInfo.className}Holder: 持有者, 如SecurityContextHolder, 通过ThreadLocal<SecurityContext>存放SecurityContext对象
${classInfo.className}Registrar/${classInfo.className}Registry/${classInfo.className}Registration 注册并管理一系列资源
${classInfo.className}Backend
${classInfo.className}RequestResponse
${classInfo.className}Runner: 运行器,如com.netflix.zuul.ZuulRunner
${classInfo.className}Invoker: 调用者
${classInfo.className}Customizer
${classInfo.className}Cache
${classInfo.className}Buffer
${classInfo.className}Composite
${classInfo.className}Wrapper
${classInfo.className}MockSupport
${classInfo.className}Event
${classInfo.className}Formatter
${classInfo.className}Reporter
${classInfo.className}Repository
${classInfo.className}Middleware
${classInfo.className}Tracker: 记录日志或者监控值
${classInfo.className}Dispatcher
Default${classInfo.className}Factory
Abstract${classInfo.className}Manager: 继承体系结构: CacheManager --> AbstractCacheManager --> AbstractTransactionSupportingCacheManager --> JCacheCacheManager
${classInfo.className}Enginer: 一般是核心模块,用来处理一类功能,引擎是个非常高级的名词，一般的类是没有资格用它的。如JDK中的ScriptEngine
${classInfo.className}Task: 某个任务。通常是个runnable
${classInfo.className}Evaluator
${classInfo.className}Proxy
${classInfo.className}Matcher
${classInfo.className}Loader
${classInfo.className}Notifier: 通知者,替换Event/Listener模式的
${classInfo.className}Result: 执行结果,如 ZuulFilterResult
${classInfo.className}Endpoint
${classInfo.className}Route: 路由
${classInfo.className}Strengthen: 增强
${classInfo.className}Provider: 如CachingProvider缓存提供者
Composite${classInfo.className}Manager: 组合模式, 如 CompositeCacheManager 要通过一个或更多的缓存管理器来进行配置,它会迭代这些缓存管理器,以查找之前所缓存的值。
${classInfo.className}Combine: 集合/组合流程各个节点的内容，如 FlowCombine中有Definition,List<Node>,List<Skip>等，相当于一个贫血模型


 在所有的类后面加上Ex(表示扩展)
DDD战术设计中4个最为核心的基础概念: 实体, 值对象, 上下文,聚合
Context的首要目的是数据聚合,而不是封装

 通常最常用的设计模式,无外乎；工厂、策略、模板的组合使用,少部分会用到责任链、建造者、组合模式。

 常用设计模式的范例
 https://github.com/mezhou887/fhey-common-imagehand.git


 DDD的分层结构